#!/usr/bin/env node

/**
 * 部署检查脚本
 * 用于验证免费主机部署的各项配置是否正确
 */

import fs from 'fs';
import path from 'path';

console.log('🔍 开始检查免费主机部署配置...\n');

// 检查项目结构
function checkProjectStructure() {
    console.log('📁 检查项目结构...');
    
    const requiredFiles = [
        'package.json',
        'vite.config.js',
        'index.html',
        'src/main.jsx',
        'src/services/imageGeneration.js',
        'FREE_HOST_DEPLOYMENT.md'
    ];
    
    const missingFiles = [];
    
    requiredFiles.forEach(file => {
        if (!fs.existsSync(file)) {
            missingFiles.push(file);
        }
    });
    
    if (missingFiles.length === 0) {
        console.log('✅ 项目结构完整');
    } else {
        console.log('❌ 缺少文件:', missingFiles.join(', '));
    }
    
    return missingFiles.length === 0;
}

// 检查环境变量配置
function checkEnvironmentVariables() {
    console.log('\n🔧 检查环境变量配置...');
    
    const requiredEnvVars = [
        'VITE_FASTGPT_API_URL',
        'VITE_FASTGPT_API_KEY', 
        'VITE_FASTGPT_CHAT_ID',
        'VITE_BFL_API_KEY'
    ];
    
    const missingVars = [];
    
    // 检查 .env 文件
    if (fs.existsSync('.env')) {
        const envContent = fs.readFileSync('.env', 'utf8');
        requiredEnvVars.forEach(varName => {
            if (!envContent.includes(varName)) {
                missingVars.push(varName);
            }
        });
        console.log('📄 找到 .env 文件');
    } else {
        console.log('⚠️  未找到 .env 文件（生产环境需要在主机平台设置环境变量）');
    }
    
    // 检查运行时环境变量
    requiredEnvVars.forEach(varName => {
        if (!process.env[varName]) {
            if (!missingVars.includes(varName)) {
                missingVars.push(varName);
            }
        }
    });
    
    if (missingVars.length === 0) {
        console.log('✅ 环境变量配置完整');
    } else {
        console.log('❌ 缺少环境变量:', missingVars.join(', '));
        console.log('💡 请在您的免费主机平台设置这些环境变量');
    }
    
    return missingVars.length === 0;
}

// 检查 CORS 代理配置
function checkCorsProxies() {
    console.log('\n🌐 检查 CORS 代理配置...');
    
    try {
        const imageGenPath = 'src/services/imageGeneration.js';
        if (!fs.existsSync(imageGenPath)) {
            console.log('❌ 未找到图片生成服务文件');
            return false;
        }
        
        const content = fs.readFileSync(imageGenPath, 'utf8');
        
        const expectedProxies = [
            'api.allorigins.win',
            'corsproxy.io',
            'api.codetabs.com',
            'cors-proxy.htmldriven.com',
            'crossorigin.me',
            'thingproxy.freeboard.io',
            'yacdn.org'
        ];
        
        const missingProxies = expectedProxies.filter(proxy => !content.includes(proxy));
        
        if (missingProxies.length === 0) {
            console.log('✅ CORS 代理配置完整');
            console.log(`📊 已配置 ${expectedProxies.length} 个代理服务`);
        } else {
            console.log('❌ 缺少代理服务:', missingProxies.join(', '));
        }
        
        return missingProxies.length === 0;
        
    } catch (error) {
        console.log('❌ 检查 CORS 代理配置时出错:', error.message);
        return false;
    }
}

// 检查构建配置
function checkBuildConfig() {
    console.log('\n🏗️  检查构建配置...');
    
    try {
        const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'));
        
        // 检查构建脚本
        if (packageJson.scripts && packageJson.scripts.build) {
            console.log('✅ 构建脚本配置正确');
        } else {
            console.log('❌ 缺少构建脚本');
            return false;
        }
        
        // 检查 Vite 配置
        if (fs.existsSync('vite.config.js')) {
            console.log('✅ Vite 配置文件存在');
        } else {
            console.log('❌ 缺少 Vite 配置文件');
            return false;
        }
        
        return true;
        
    } catch (error) {
        console.log('❌ 检查构建配置时出错:', error.message);
        return false;
    }
}

// 生成部署报告
function generateDeploymentReport(checks) {
    console.log('\n📋 部署检查报告');
    console.log('='.repeat(50));
    
    const allPassed = Object.values(checks).every(result => result);
    
    Object.entries(checks).forEach(([checkName, passed]) => {
        const status = passed ? '✅ 通过' : '❌ 失败';
        console.log(`${checkName}: ${status}`);
    });
    
    console.log('='.repeat(50));
    
    if (allPassed) {
        console.log('🎉 所有检查都通过！您的项目已准备好部署到免费主机。');
        console.log('\n📖 部署步骤:');
        console.log('1. 运行 npm run build 构建项目');
        console.log('2. 将 dist 文件夹内容上传到您的免费主机');
        console.log('3. 在主机平台设置环境变量');
        console.log('4. 访问 /cors-test.html 测试 CORS 代理');
    } else {
        console.log('⚠️  部分检查未通过，请修复上述问题后重新检查。');
        console.log('\n📖 参考文档: FREE_HOST_DEPLOYMENT.md');
    }
}

// 主函数
function main() {
    const checks = {
        '项目结构': checkProjectStructure(),
        '环境变量': checkEnvironmentVariables(),
        'CORS代理': checkCorsProxies(),
        '构建配置': checkBuildConfig()
    };
    
    generateDeploymentReport(checks);
}

// 运行检查
main();
